#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = '汤小洋'

'''
while循环
'''
# 输出5次Hello World
i = 1
while i <= 5:
    print('Hello World')
    i += 1

# 计算1到100之和
sum = 0  # sum是内置的函数名，不建议使用，但可以使用
i = 1
while i <= 100:
    sum += i
    i += 1
print('1到100的和为：',sum)

# 计算1到50之间所有偶数之和
i = 1
sum = 0
while i <= 50:
    if i % 2 == 0:
        sum += i
    i += 1
print('1到50之间所有偶数之和为：',sum)

# 打印输出[0,200]之间能被7整除，但不能被4整除的所有整数，并统计个数，要求每行打印5个
count = 0 # 个数
i = 0
while i<=200:
    if i%7 == 0 and i%4 != 0:
        print(i,end="\t")
        # 统计个数
        count += 1 
        # 每打印5个换一行
        if count%5 == 0:
            print()
    i += 1
print('\n总个数：',count)


'''
for...in循环
'''
names = ['tom', 'jack', 'alice']
# 使用while循环
# i = 0
# while i < len(names):
#     print(names[i])
#     i += 1 

# 使用for...in循环
for name in names:
    print(name)

# 使用range()函数生成一个序列
# for i in range(3, 25, 2):  # 生成一个[3,25)的整数序列，步长为2
for i in range(25):  # 生成一个[0,25)的整数序列，默认从0开始
    print(i, end=' ')
print()

# 计算1到100之和
sum = 0
for x in range(1, 101):
    sum = sum + x
print(f'1到100的和为：{sum}')


'''
break
'''
# 计算1到50之间能被3整除的数字之和，当总和大于100时则停止累加，输出此时的数字和总和
# sum = 0
# i = 1
# while i <= 50:
#     if i % 3 == 0:
#         sum += i
#     if sum > 100:
#         print('此时数字为：',i)
#         break
#     i += 1
# print('总和为:',sum)

# 循环提示用户输入数字，直到输入0为止，即输入0表示退出
while True:
    num = int(input('请输入一个数字（输入0退出）：'))
    if num == 0:
        print('再见')
        break

'''
continue 
'''
# 输出1到10之间的所有的奇数
for i in range(1, 11):
    if i % 2 == 0:
        continue
    print(i)


'''
在while或for循环中可以搭配使用else
当循环正常执行后，会执行else语句块，如果循环被break中断，则不会执行else语句块
'''
a = 1
while a <= 10:
    print(a)
    a += 1
    if a > 6:
        break
else:
    print('循环正常执行完毕！')

for b in range(1, 11):
    print(b)
    if b > 6:
        break
else:
    print('循环正常执行完毕！')


'''
二重循环
'''
# 某次程序大赛，共3个班级参加，每个班级有4名学员参赛，计算每个班级参赛学员的平均分
# for i in range(1, 4):
#     print(f'-----请输入第{i}个班级的学生成绩-----')
#     sum = 0
#     for j in range(1, 5):
#         score = eval(input(f'请输入第{j}个学生的成绩：'))
#         sum += score

#     avg = sum / 4
#     print(f'第{i}个班级的平均分为：{avg}')


'''
冒泡排序法
思路：每次比较相邻的两个元素, 如果他们的顺序不对就交换位置
结论：如果有n个元素，需要比较n-1轮，每一轮需要比较n-i次
'''
nums = [14, 2, 54, 120, 34, 6, 32, 97]
# 外层循环控制比较的轮数，每一轮确定一个数字
for i in range(1,len(nums)):
    # 内层循环控制每一轮比较的次数
    for j in range(0,len(nums) - i):
        if nums[j] > nums[j + 1]:  # 升序排列，如果是降序，只需要改为<
            nums[j], nums[j + 1] = nums[j + 1], nums[j]
print(nums)

nums.sort(reverse=True)
print(nums)

'''
练习：
1.使用循环输出列表中每个元素的索引和元素
2.输出列表中除第一个元素以外的其他元素
'''
names = ['tom', 'jack', 'alice', 'mike', 'lucy']

# 1.使用循环输出列表中的每个元素的索引和元素值
# 使用while循环
i = 0
while i < len(names):
    print(i, names[i])
    i += 1
print('-' * 80)

# 使用for...in循环
for i in range(0, len(names)):
    print(i, names[i])
print('-' * 80)

# 2.输出列表中除第一个元素以外的其他元素
for name in names[1:]:
    print(name)
